草庐IT

反射简化 JDBC ResultSet

全部标签

java - 垃圾收集和反射

我想知道当您有一个使用反射来获取某些字段值的类时,垃圾回收是如何工作的。当不使用正式语言语法访问它们时,JVM如何知道这些字段引用的值是可访问的,因此目前不符合垃圾回收条件?指出问题的一小段(尽管此处过分强调了反射(reflection)):/****/importjava.lang.reflect.Field;publicclassB{protectedBprevious=null,next=null;/****/publicB(Bfrom){this.previous=from;}publicvoidtransition(Bto){this.next=to;}publicBnext

java - 一个方法可以在Java中使用反射找出自己的名字吗

这个问题在这里已经有了答案:Gettingthenameofthecurrentlyexecutingmethod(23个回答)关闭5年前。我知道您可以在Java中使用反射在运行时获取类的名称、方法、字段等。我想知道一个方法在它内部是自己的时候能找出它自己的名字吗?另外,我也不想将方法名称作为字符串参数传递。例如publicvoidHelloMyNameIs(){StringthisMethodNameIS=//Dosomething,sothevariableequalsthemethodnameHelloMyNameIs.}如果可能的话,我想它可能会涉及到使用反射,但也许不会。如果

java - 如何使用反射解析泛型返回类型的实际类型?

我有一个接口(interface),它带有一个具有通用返回类型的方法,并且在运行时有一些间接实现该接口(interface)的类实例。现在我想找出每个使用反射的实现的实际返回类型。(我的想法是利用这种机制,使用接口(interface)来定义一个策略,并在运行时从一组策略实现中找到一个匹配的策略(特定的返回类型),而不必引入冗余的辅助方法公开类型)。更具体地说,让我们考虑以下场景:privateinterfaceDAO{publicEgetById(Iid);}privateabstractclassAbstractDAOimplementsDAO{@OverridepublicTge

java - 如何使用反射告诉一个方法有可变参数参数?

这是一个示例代码packageorg.example;importjava.lang.reflect.Method;classTestRef{publicvoidtestA(String...a){for(Stringi:a){System.out.println(i);}}publicstaticvoidmain(String[]args){ClasstestRefClass=TestRef.class;for(Methodm:testRefClass.getMethods()){if(m.getName()=="testA"){System.out.println(m);}}}}输

Java 反射性能问题

我知道有很多话题都在谈论反射性能。甚至官方Java文档都说反射速度较慢,但​​我有这段代码:publicclassReflectionTest{publicstaticvoidmain(String[]args)throwsException{Objectobject=newObject();Classc=Object.class;intloops=100000;longstart=System.currentTimeMillis();Objects;for(inti=0;i我认为这不是一个有效的基准,但至少应该显示出一些差异。我执行它是为了等待反射正常调用比常规调用慢一点。但这会打印

java - 无法使用 java 反射更改静态最终字段?

我最近偶然发现了ChangeprivatestaticfinalfieldusingJavareflection并测试了polygenelubricants的EverythingIsTrue类,工作正常,System.out.format("Everythingis%s",false);打印Everythingistrue确实。但是当我将代码更改为publicclassEverythingIsTrue{publicstaticfinalbooleanFALSE=false;staticvoidsetFinalStatic(Fieldfield,ObjectnewValue)throws

java - 保护字段免受反射 - System.security 的奇怪案例

我目前正在研究Java安全性并遇到了一个奇怪的现象。java中的SecurityManager存放在java.lang.System中的“security”字段中。有趣的是,该字段似乎受到保护以防止反射访问,这确实有意义,但据我所知,该字段是唯一的。所以这里是例子:for(Fieldf:System.class.getDeclaredFields())System.out.println(f);输出publicstaticfinaljava.io.InputStreamjava.lang.System.inpublicstaticfinaljava.io.PrintStreamjava

java - 反射安全

如何通过不允许Method来加强反射安全,Field,Constructor对象调用setAccessible(true)?SecurityPolicy文件还是其他?通常对于独立的Java应用程序没有SecurityManager已注册。我用这个System.setSecurityManager(newSecurityManager());这种方法适用于调用方法。我想强制执行整个jar或使用该jar的客户端代码不允许调用setAccessible(true);有什么更好的方法吗?谢谢。 最佳答案 嗯,它确实适用于setAccessi

java - 不使用反射访问类的字段?

有没有一种方法可以在不使用反射的情况下访问类中的特定Field?考虑这个类:classMyType{publicinttheNumber;}我想在哪里访问theNumber的java.lang.reflect.Field。这肯定有效:Fieldf=MyType.class.getDeclaredField("theNumber");但是,我想对字段名称进行编译检查,所以理想情况下是这样的(但当然我的示例无法编译):Fieldf=MyType.class::theNumber;这是可能的还是我的编译器能力? 最佳答案 您可以使用注解处

java - 如何使用反射获取参数类型?

我想使用具有不同数量参数的函数。问题是我不知道每个函数的参数数量,也不知道函数名称,因为它们存储在数组中。我只知道类名,但不想使用getDeclaredMethods,因为它会增加搜索时间。有没有办法获取每个函数的参数类型? 最佳答案 当我不得不查找方法时,我通常做的是从我正在做的查询中生成一个缓存键,并将带有这个缓存键的搜索结果保存在一个映射中。例子:我知道方法参数是Boolean.TRUE、Arrays.asList("foo","bar","baz")和BigInteger.valueOf(77777l)我的类包含一个带有签名